package demo1;

import java.util.LinkedList;
import java.util.Queue;
//用队列实现栈
class MyStack {
     Queue<Integer> Stack1;
     Queue<Integer> Stack2;
    public MyStack() {
        this.Stack1 = new LinkedList<>();
        this.Stack2 = new LinkedList<>();
    }
    // 将元素 x 压入栈顶。
    public void push(int x) {
        if(Stack1.isEmpty() && Stack2.isEmpty()){
            Stack1.offer(x);
        }else if(!Stack1.isEmpty()){
            Stack1.offer(x);
        }else {
            Stack2.offer(x);
        }
    }
    //移除并返回栈顶元素。
    public int pop() {
        int val = 0;
        if(empty()){
            return -1;
        }
        int num = top();
        if(Stack1.isEmpty()){
            while(!Stack2.isEmpty()){
                val =  Stack2.poll();
                if(val != num){
                    Stack1.offer(val);
                }
            }
        }else {
            while(!Stack1.isEmpty()){
                val = Stack1.poll();
                if(val != num){
                    Stack2.offer(val);
                }

            }
        }
        return val;
    }
    //返回栈顶元素。
    public int top() {
        int val = 0;
        if(empty()){
            return -1;
        }
        if(Stack1.isEmpty()){
            while(!Stack2.isEmpty()){
                val =  Stack2.poll();
                Stack1.offer(val);
            }
        }else {
            while(!Stack1.isEmpty()){
                val = Stack1.poll();
                Stack2.offer(val);
            }
        }
        return val;
    }
    // 如果栈是空的，返回 true ；否则，返回 false
    public boolean empty() {
        return Stack1.isEmpty() && Stack2.isEmpty();
    }
}